import { HttpException, HttpStatus, Injectable } from '@nestjs/common'
import { CreateUserDto } from './dto/create-user.dto'
import { UpdateUserDto } from './dto/update-user.dto'
import { User } from './entities/user.entity'
import { InjectRepository } from '@nestjs/typeorm'
import { Repository } from 'typeorm'

@Injectable()
export class UserService {
  constructor(
    @InjectRepository(User) private userRepository: Repository<User>
  ) {}

  async register(createUser: CreateUserDto) {
    const { username } = createUser

    const hasUser = await this.userRepository.findOne({
      where: {
        username: username
      }
    })

    if (hasUser) {
      throw new HttpException('用户名已存在', HttpStatus.BAD_REQUEST)
    }

    /**
     * 先create--》save 和  new User --》save  是一样的效果
     * const user = new User(createUser)
     *
     * this.userRepository.save(user)
     */
    const newUser = await this.userRepository.create(createUser)

    // 方式一： 创建用户的时候，不返回用户的 password 字段
    // 这里使用 findOne 查找用户信息，在查询的时候，会触发 实体里面的 @Column({ comment: '密码', select: false }) select: false  所以，密码字段就不会在创建用户的时候返回
    // await this.userRepository.save(newUser)
    // return this.userRepository.findOne({
    //   where: {
    //     username
    //   }
    // })

    // 方式2： 使用 class-transformer 提供的方式，用装饰器实现字段的过滤
    return await this.userRepository.save(newUser)
  }

  findAll() {
    return `This action returns all user`
  }

  findOne(id: number) {
    return `This action returns a #${id} user`
  }

  update(id: number, updateUserDto: UpdateUserDto) {
    console.log(updateUserDto)

    return `This action updates a #${id} user`
  }

  remove(id: number) {
    return `This action removes a #${id} user`
  }
}
